//*********************************************************************
//     Release Note: GameBoy Advance Developers Kit 2000 release 3
//     2001/02/14 relnotes_rel3.txt
//     Copyright (C) 1999-2001 NINTENDO Co., Ltd.
//*********************************************************************


Summary
-------

   Game Boy Advance Developers Kit Version 3.0 provides the latest AGB 
   development environment.
   This release version features updates to the header, library, 
   MusicPlayerAGB2000, various documents, the program samples and GNU TOOL.

   To access the various documents please double-click on: 
   /agb/doc/Allmanual/index.htm.

   Before installation, backup all necessary data and then delete all contents 
   below the /agb directory.



Important Changes:
------------------

     -- The header and the library have been updated.
     
     -- MusicPlayerAGB2000 has been updated to Ver.1.05.
        To learn about the changes, see the manual's version history.
       
     -- Bugs relating to the compiler, assembler and objcopy have been fixed.
        For details, see the file "agb/doc/CompilerBugFix.txt"
       
     -- Added armelf-000512.
        (This is located in the CD root directory, so copy it over for use as 
        needed.) 
       
     -- Added GNUPro source file.  (Located in the CD root directory.)



New Sample Programs:
--------------------

     -- multi_sio / multi_boot:
        An example of multiplayer communications (Multi Game Pak support / Single 
        Game Pak support).
        Note that synchronization slips in some frames in this sample.
       
     -- multi_sio_sync / multi_boot_sync:
        An example of multiplayer communications where data transfer is 
        synchronized between AGB units.
        Since SIO interrupts must be allowed even during V blank interrupts, 
        multiple interrupts are utilized in this sample.

     -- sio32_multi_load / sio32_multi_load_sync:
        An example of loading data to AGB, using 32bit serial communications.
        This can be used to transfer data from master to slave at the time of a 
        multiplayer boot.  Communications are directional from master to slave, 
        but this enables faster data transfers than with multiplayer 
        communications.
       
     -- blib_sample:
        A sample program using the AGB Game Pak Backup Library.
       
     -- ir_sample:
        A sample program using the AGB infrared communications library.



Updated Sample Programs:
------------------------

     -- For all samples  : The comments in rom_header.s have been changed.
        Unused data (7Byte) ==> Reserved area (0 fixed | 7Byte)
        Checksum            ==> Reserved area (0 fixed | 2Byte)
         
     -- For all samples  : Added support for [Support Level 1 (required)] 
        in the program to avoid the problem of SRAM being erased upon 
        hot plugin of the Game Pak.
       
     -- reintr  : Added support for [Support Level 3 (recommended)] in 
        the program to avoid the problem of SRAM being erased upon hot plugin 
        of the Game Pak.
        Look here to also see the [Support Level 2 (recommended)].




Updated Demo Program:
---------------------

     -- yoshi  :  Added support for MusicPlayerAGB2000 Ver1.05




Documents Added:
----------------

      agb/doc/
      -- About AGB_CRC Calculations text file, "AGB_CRC.txt"
      -- Compiler bug fixes text file, "CompilerBugFix.txt"
      -- "relnotes_rel3.txt"  (This file)
      
      agb/doc/pdf/
      -- AGB Backup Library Manual Version 11
      -- AGB Infrared Communications Programming Guide Version 1.0
      -- AGB Infrared Communications Library Manual Version 1.0

      agb/doc/AllManual/ (HTML)
      -- AGB Infrared Communications Programming Guide Version 1.0
      -- AGB Music Player 2000 Programmers Manual Version 1.05
      -- AGB Music Player 2000 Sound Developers Manual Version 1.05
      -- AGB Music Player 2000 Tutorial Version 1.05
      


Documents Revised:
------------------

     agb/doc/pdf/
     -- AGB Programming Manual Version 1.02
     -- AGB System Call Reference Manual Version 1.0

     agb/doc/AllManual/ (HTML)
     -- AGB Programming Manual Version 1.02
     -- AGB Backup Library Manual Version 11
     -- AGB FAQ Version 010216
     -- Header Version 010307
     
     agb/MusicPlayerAGB2000/Manual/
     -- MusicPlayerAGB2000 Programmers Manual Version 1.05
     -- MusicPlayerAGB2000 Sound Developers Manual Version 1.05
     -- MusicPlayerAGB2000 Tutorial Version 1.05
     


Warnings:
---------

     -- How to Avoid Loss of SRAM Data due to CPU Lockup with a hot plugin
        of the Game Pak.

   [This is an important notice to all games being developed with AGB SRAM]

   At the present time, if a Game Pak is removed during game play while the power
   is still ON, or if a Game Pak is inserted while the power is ON, then it is 
   very easy for the data in the Backup SRAM to be erased.
   Even though this hot plugin of Game Paks is not prohibited in the 
   user booklet, many claims are nevertheless anticipated from consumers who have
   accidentally deleted their backup data.
   For this reason, we ask that you please implement the 
   [Support Level 1], described below, before submitting your game to
   Lotcheck.


   [Game Submission]

   When you submit your AGB Software Specification Sheet, please note in the 
   Comments section something like "Program to avoid loss of SRAM - Support Level 1",
   so we can test for adherence in Lotcheck.


   [Summary]

   Use Game Pak interrupts to enter into endless loops when interrupts arise.
   As a basic rule, always enable Game Pak interrupts in programs that run on 
   the Game Pak.



[Support Level 1 (required)]

   All samples included in the AGB Developers Kit Version 3.0 support the 
   [Level 1 Countermeasure], so please take a look at these samples.

1) Enable Game Pak interrupts whenever possible inside the main loop 
   (subroutines included).

   (However, Game Pak interrupts should be disabled in a program that downloads 
   from a multiplayer boot.  This is because the ROM registration area in the 
   Game Pak is checked. If a Game Pak is not inserted, noise generated from 
   the open connection could lead to a Game Pak interrupt.
   Please enable Game Pak interrupts when a Game Pak is inserted, so that abnormal
   data is not read if the Game Pak happens to be pulled out while it is being 
   accessed.
   Because the IE flag is cleared once when the Game Pak program is activated 
   from a downloaded program, please re-enable Game Pak interrupts for the Game 
   Pak program.  The contrivance can be shared with the initialization routine 
   for normal Game Pak activation.) 
    

   Example:  simple / main.c / AgbMain() / Line 95

        *(vu16 *)REG_IME = 1;                       // Set IME
        *(vu16 *)REG_IE  = V_BLANK_INTR_FLAG        // Enable V blank interrupts
                         | CASSETTE_INTR_FLAG;      // Enable Game Pak interrupts



2) Enter an endless loop when a Game Pak interrupt occurs.


    Example:  simple / crt0.s / intr_main() / Line 95
              reintr / crt0.s / intr_main() / LIne 102

               ands    r0, r1, #CASSETTE_INTR_FLAG  @ Game pak interrupt
       loop:   bne     loop
       jump_intr:



3) Give top priority to checking for Game Pak interrupts.  (In the case of 
   multiple interrupts, it is not necessary to raise the level of priority of the
   Game Pak interrupt.)



    Example:  simple / crt0.s / intr_main() / Line 54

               and     r1, r2, r2, lsr #16     @ r1: IE & IF
               ands    r0, r1, #CASSETTE_INTR_FLAG  @ Game pak interrupt
       loop:   bne     loop
               mov     r2, #0
               ands    r0, r1, #V_BLANK_INTR_FLAG   @ V blank interrupt
               bne     jump_intr
               add     r2, r2, #4
                .
                .
                .
               ands    r0, r1, #KEY_INTR_FLAG       @ Key interrupt
       jump_intr:




[Support Level 2 (recommended)]

1) Implement the [Support Level 1]

2) Execute in RAM all routines for which Game Pak interrupts are prohibited. 
   (Such as routines where IME is temporarily OFF.)

3) Minimize interrupt processes.


    Example:  multi_sio / crt0.s / intr_main()  / Line 60
                          main.c / AgbMain()    / Line 119
                                   VBlankIntr() / Line 150


       Limit the V blank interrupt process to sound DMA updates and 
       setting the interrupt check flag. Update VRAM and OAM during 
       V blanks in the main loop.




[Support Level 3 (recommended)]

   The sample program agb/src/sample/reintr supports Level 3 Countermeasures, so 
   please take a look at that program.


1) Implement the [Support Level 2].

2) Perform either of the two procedures described below:


  2a) Use multiple interrupts, and enable multiple interrupts for Game Pak 
      interrupts.
      Doing this avoids runaway during an interrupt process in the Game Pak.


      Example:  reintr / crt0.s / intr_main() / Line 105
                                                   @ Set IE  <- Select multiple interrupts
               ldr     r1, =CASSETTE_INTR_FLAG | TIMER0_INTR_FLAG
               and     r1, r1, r12
               strh    r1, [r3]

  
  2b) Execute all interrupt processes in RAM.





     -- Important notices regarding the submission of the AGB Master ROM

       
<< Very important items regarding Game Boy Advance >> 


<Warnings about submitting Master ROM>

   - Regarding the size of the Master ROM, be sure to enter the ordered mask ROM 
     size first, then perform a CRC calculation.  If the two sizes differ your
     submission will fail lot check.  The CRC calculation software 
     (agb_crc_check_en.zip) is included in AGB Developers Kit Version 3.0 as 
     "agb/bin/Nrdc.exe".  To learn how to use this software, read the file,
     "agb/doc/AGB_CRC.txt".
     (Be sure to calculate using little endian.)

   - Be sure to pack the ROM registration area 80000BEH, 80000BFH with [00H].

 

<About the Backup Libraries>

   The backup libraries must be these versions or later when the Master ROM is 
   submitted:

       256kbit SRAM   library header  ver. 1.1.0  (noted in AgbSram.h)
       256kbit SRAM   library header  ver. 1.0.0  (noted in AgbSramFast.h)
       512kbit FLASH  library header  ver. 1.2.1  (noted in AgbFlash.h)
       4kbit   EEPROM library header  ver. 1.1.1  (noted in AgbEeprom.h)

  The version numbers can be found written in each header.  If the libraries are 
  not of these or later versions the Master ROM will not be accepted.





Other notifications:
--------------------

     -- Regarding the AGB dedicated infrared adapter

        If you need the AGB dedicated infrared adapter for your game planning, 
        please contact the NOA Licensing Department and we will make special 
        arrangements.

               support@noa.com  (AGB support person)



End

